//
//  StatusViewModel.swift
//  weibo1
//
//  Created by changhongliang on 2017/8/1.
//  Copyright © 2017年 richinfo. All rights reserved.
//
//关于MVVM,对于简化模型来说,操作主要是这样的
//1.创建 VM 模型
//2.将原来的模型作为现在VM模型的一个属性
//3.为这个模型创建新的属性,这些新的属性主要是为了view在获取数据时更加直接方便的拿到数据.主要为了加工和处理原始的模型值
//4.在发送网络请求获取相关数据和对view的模型属性赋值时都使用新的VM模型
//5.在对view的相关属性赋值时主要包括两个方法: a.原始值就可以直接用的,可以一用 vm.m.属性 进行赋值,还有一类是已经处理过了,主要是通过模型直接赋值

import UIKit

class StatusViewModel: NSObject {
    
    /// 模型对象
    var status: Status
    var queue: DispatchQueue = DispatchQueue(label: "dealData")
    init(status:Status) {
        self.status = status
        /*
         想要性能比较好,就将固定不变得数据方法init方法中处理,如果代码比较多,那么就为每个逻辑创建一个方法,将对应的代码放到方法中去,
         如果不在乎性能,可以直接通过get方法处理数据
         */
        //2.处理图片

        guard let urls = (status.retweeted_status != nil) ? status.retweeted_status?.pic_urls : status.pic_urls else {
            return
        }
        
        thumbnail_pics = [NSURL]()
        bmiddle_pics = [NSURL]()
        for dict in urls {
            var urlStr = dict["thumbnail_pic"] as? String
//            urlStr = urlStr?.replacingOccurrences(of: "thumbnail", with: "")
            let url = NSURL(string:urlStr ?? "")
            thumbnail_pics?.append(url!)
            //2.处理大图http://wx3.sinaimg.cn/mw690
            guard let temp = urlStr, temp != "" else {
                return
            }
            urlStr = temp.replacingOccurrences(of: "thumbnail", with: "bmiddle")
            let url2 = NSURL(string: urlStr!)
            bmiddle_pics?.append(url2!)
        }
        
        //处理时间
//        guard let temp = status.created_at,temp != "" else {
//            self.createdText = ""
//                   }
//        guard let createDate = NSDate.dateWithString(string: temp) else {
//            self.createdText = ""
//        }
//         self.createdText = createDate.desc
        if let temp = status.created_at {
            self.createdText = NSDate.dateWithString(string: temp)?.desc ?? ""
        }
        //计算行高
//        queue.async {
//            self.cellHeight = Layout.caculateHeight(status: status)
//        }
    }
    
    
    /// MARK: - 数据处理
    
    ///来源字符串
    var sourceText :String
    {
        //1.处理来源
        //1.1安全校验
        guard let temp = status.source, temp != "" else {
            return ""
        }
        //取某个字符串位置时一定要判断一下是否含有,否则如果没有可能会崩溃
        if !(temp.contains(">")&&temp.contains("<")) {
            return ""
        }
        
        //1.找到开始的位置
        let startIndex = (temp as NSString).range(of: ">").location + 1
        //2.找到需要截取的字符串的长度
        let length = (temp as NSString).range(of: "<", options:.backwards).location - startIndex
        //截取字符串
        let res = (temp as NSString).substring(with: NSMakeRange(startIndex, length))
       return "来自" + res

    }
    
    
    /**
     刚刚(一分钟内)
     X分钟前(一小时内)
     昨天 HH:mm(昨天)
     MM-dd HH:mm(一年内)
     yyyy-MM-dd HH:mm(更早期)
     */
    var createdText:String?
    
    /// 存储所有配图URL
    var thumbnail_pics: [NSURL]?
    /// 存储所有配图大图URL
    var bmiddle_pics:[NSURL]?
    
    ///用户头像地址url
    var avatarUrl: URL?
    {
      return NSURL(string:status.user?.profile_image_url ?? "") as URL?
    
    }
    
    
    ///认证图标
    var verifiedImage: UIImage? {
        
                switch status.user?.verified_type ?? -1
                {
                case 0 :
                    //个人认证
                   return UIImage(named:"avatar_vip")
                case 2,3,5:
                    //企业认证
                    return UIImage(named:"avatar_enterprise_vip")
                case 220:
                    //微博达人
                   return UIImage(named:"avatar_grassroot")
                default:
                    //没有认证
                    return nil
                    
                }

    }
    
    ///会员图片
    var mbrankImage:UIImage? {
        let mbrank = status.user?.mbrank ??  -1
        
        if mbrank >= 1 && mbrank <= 6
        {
           return UIImage(named: "common_icon_membership_level\(mbrank)")
        }
        return nil
    }
    
    ///高度
    var cellHeight = 0.0
    
    

}
